package com.solution.common.dao;

import java.util.List;
import java.util.Map;

import org.mybatis.spring.SqlSessionTemplate;

import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;


/**
 * @描述: 数据访问层基础支撑接口.
 * @作者: WuShuicheng .
 * @创建时间: 2013-7-22,下午4:52:52 .
 * @版本: 1.0 .
 * @param <T>
 */
public interface BaseDao<T> {

	/**
	 * 根据实体对象新增记录.
	 * @param entity
	 * @return
	 */
	long insert(T entity);

	/**
	 * 批量保存对象.
	 * @param entity
	 * @return
	 */
	int insert(List<T> list);

	/**
	 * 更新实体对应的记录.
	 * @param entity
	 * @return
	 */
	int update(T entity);

	/**
	 * 批量更新对象.
	 * 
	 * @param entity
	 *            .
	 * @return int .
	 */
	int update(List<T> list);

	/**
	 * 根据ID查找记录.
	 * @param id
	 * @return entity .
	 */
	T getById(long id);

	/**
	 * 根据ID删除记录.
	 * @param 
	 * @return
	 */
	int deleteById(long id);

	/**
	 * 分页查询 .
	 * @param pageParam  分页参数.
	 * @param paramMap 业务条件查询参数.
	 * @return
	 */
	PageBean listPage(PageParam pageParam, Map<String, Object> paramMap);
	
	/**
	 * 根据传入的分页标记进行分页查询方法
	 * @param pageParam 分页参数
	 * @param paramMap 分页查询参数
	 * @param sqlId 查询分页数据的sqlid
	 * @param countSqlId 查询分页条数的sqlid
	 * @author llp
	 * @return PageBean 包含分页参数和分数数据
	 * @date 2017/4/18 4:58
	 */
	public PageBean listPage(PageParam pageParam, Map<String, Object> paramMap, String sqlId, String countSqlId);
	
	/**
	 * 根据条件查询 listBy
	 * @param paramMap
	 * @return 返回集合
	 */
	List<T> listBy(Map<String, Object> paramMap);

	/**
	 * 指定sql查询列表
	 * @param paramMap
	 * @param sqlId
	 * @return
	 */
	List<Object> listBy(Map<String, Object> paramMap, String sqlId);

	/**
	 * 根据条件查询
	 * @param paramMap
	 * @return 返回实体
	 */
	T getBy(Map<String, Object> paramMap);

	/**
	 * 指定sql查询单个对象
	 * @param paramMap
	 * @param sqlId
	 * @return
	 */
	T getBy(Map<String, Object> paramMap, String sqlId);

	/**
	 * 获取sqlTemplate
	 * @return
	 */
	SqlSessionTemplate getSessionTemplate();

}
